//
// Created by calm on 2023-12-28.
//
#include <stdio.h>
#include <stdlib.h>

/**
 * 动态初始化二维数组的函数
 * @param rows
 * @param cols
 * @return
 */
int ** initTwoArray(int rows,int cols){
    //动态的二维数组
    int ** array;
    //1.声明二维指针
    array=(int **) malloc(sizeof(int *) * rows);
    for(int i=0;i<rows;i++){
        array[i]=(int *) malloc(sizeof(int) * cols);
    }
    //使用0进行初始化
    for(int row=0;row<rows;row++){
        for(int col=0;col<cols;col++){
            array[row][col]=0;
        }
    }
    return array;
}

void printArray(int** array,int rows,int cols){
    for(int i=0;i<rows;i++){
        for(int j=0;j<cols;j++){
            printf("%3d",array[i][j]);
        }
        printf("\n");
    }
}



void destoryTwoArray(int** array,int rows){
    for(int i=0;i<rows;i++){
        free(array[i]);
    }
    free(array);
}


int main(){
    system("chcp 65001");
    int rows,cols;
    puts("输入行数和列数");
    scanf("%d %d",&rows,&cols);
    //初始化二维数组
    int** array=initTwoArray(rows,cols);
    puts("对矩阵的处理");
    while(1){
        int cmd ;
        scanf("%d",&cmd);
        if(cmd==1){
            puts("蛇形输出");
        }
        if(cmd==2){
            puts("逆向输出");
        }
        if(cmd==3){
            puts("行列转换");
        }
        if(cmd==4){
            puts("水平翻转");
        }
        if(cmd==5){
            puts("垂直翻转");
        }
        if(cmd==6){
            puts("print array data");
            printArray(array,rows,cols);
        }
        if(cmd==0){
            destoryTwoArray(array,rows);
            exit(0);
        }

    }


    return -1;
}